昨天,我們介紹了指標的一些小概念,不知道讀者們是否有比較清楚指標是甚麼東西呢?(我自己在學的時候,會覺得指標好難可是好像有點有趣)
今天,就讓我們繼續介紹指標吧!
指標變數是一種變數,但是裡面放的資料不再是我們熟悉數值(value),而是某個記憶體位址(memory address),我們也可以說,所謂的 pointer ,就是所儲存的 value 是某個 memory address。
而指標變數的宣告,和一般變數宣告(variable declaration)是一樣的,但在變數名稱前,需要加入一個星號 *
。
我們可以這樣宣告一個指標變數:int *p;
int * p;
int* p;
以上的宣告是告訴編譯器,儲存在這個變數中的是一個記憶體位址,而在這個記憶體位址中存放的是一個 int
型態的整數。
我們也可以混合一般的變數宣告和指標變數宣告:
int *x,y;
double *p;
float *p;
char *p;
我們也可以透過下列程式碼,將 variable x 的 memory address 指定給 pointer p。
int x = 38; //宣告變數x並指定初值
int *p; //宣告指標變數p儲存int變數位址
p = &x; //指定指標變數p的值是變數x的位址
我們把程式完整寫完並輸出:
#include<stdio.h>
int main(){
int x = 38; //宣告變數x並指定初值
int *p; //宣告指標變數p儲存int變數位址
p = &x; //指定指標變數p的值是變數x的位址
printf("變數x的位址 >> %p\n\n", &x);
printf("指標變數p的值 >> %p\n\n", p);
printf("指標變數p的位址 >> %p", &p);
return 0;
}
從上面的例子我們可以知道,指標變數 p
除了他的值是 x
變數的位址外,他也有自己的位址。
關係圖會長這樣:
我們可以藉著星號 *
印出指標變數裡面存放位址的值。printf("*p = %d", *p);
明天讓我們來談談指標運算與指標陣列吧~